#include "loginform.h"
#include "ui_loginform.h"

LoginForm::LoginForm(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::LoginForm)
{
    ui->setupUi(this);
    // 加载图片
    pixmap = QPixmap("://1.jpeg");

    // 初始设置图片，保持比例并适应 label 大小
    updateLabelPixmap();

    //generateAndInsertData();
    Init_Login();

}

LoginForm::~LoginForm()
{
    if (db.isOpen()) {
        db.close();
    }
    delete ui;
}
// 动态调整图片大小
void LoginForm::resizeEvent(QResizeEvent *event)
{
    updateLabelPixmap();
    QWidget::resizeEvent(event);
}

void LoginForm::Init_Login()
{
    //连接数据库，获取数据库的账号密码
    open_database();






}

void LoginForm::open_database()
{
    //连接数据库，获取数据库的账号密码
    filename = "../ChargingPiles/login.db";
    QFileInfo Info(filename);

    if (!Info.exists()) {
        qDebug()<<"数据库文件不存在";
        return;
    }

    // 设置数据库驱动
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    if (!db.isValid()) {
        qDebug()<<"数据库驱动无效";
        return;
    }

    // 设置数据库参数
    db.setHostName("127.0.0.1");
    db.setDatabaseName(filename);

    // 打开数据库
    if (db.open()) {
        qDebug()<<"数据库打开成功";
        //emit changeTableWindow();//切换页面用的
    } else {
        qDebug()<<"数据库打开失败";
    }

    //读取数据库
    QSqlQuery query("select * from login");

    while (query.next()) {
        QString name = query.value("name").toString();
        QString password = query.value("password").toString();

        names.append(name);
        passwords.append(password);
    }


    //显示数据库里面的账号密码
    for(auto &val : names){
        qDebug()<<val;
    }
    for(auto &val : passwords){
        qDebug()<<val;
    }
}

// 更新图片大小到 label
void LoginForm::updateLabelPixmap()
{
    QPixmap scaledPixmap = pixmap.scaled(ui->label_2->size(), Qt::KeepAspectRatio);
    ui->label_2->setPixmap(scaledPixmap);
}

bool LoginForm::eventFilter(QObject *watched, QEvent *event)
{
    if (event->type() == QEvent::KeyPress) {
        QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
        if (keyEvent->key() == Qt::Key_Return || keyEvent->key() == Qt::Key_Enter) {
            qDebug() << "检测到回车键, 触发控件" << watched;
            check_login();
            return true; // 消耗事件，防止传播
        }
    }
    return QWidget::eventFilter(watched, event);
}



void LoginForm::on_usernameedit_returnPressed()
{
    username = ui->usernameedit->text();
    qDebug()<<"用户输入的账号："<<username;
    ui->passwordedit->setFocus();
}

void LoginForm::on_passwordedit_returnPressed()
{
    password = ui->passwordedit->text();
    qDebug()<<"用户输入的密码："<<password;
    ui->signinpushButton->setFocus();

}

void LoginForm::check_login()
{
    names.clear();
    passwords.clear();

    QSqlQuery query("SELECT * FROM login");

    bool isLoginSuccessful = false;

    while (query.next()) {
        QString name = query.value("name").toString();
        QString password = query.value("password").toString();

        qDebug() << "查询到用户名：" << name << ", 密码：" << password;

        names.append(name);
        passwords.append(password);
    }

    // 遍历用户名和密码进行匹配
    for (int i = 0; i < names.size(); ++i) {
        if (username == names[i] && password == passwords[i]) {
            isLoginSuccessful = true;
            break;
        }
    }

    // 根据登录结果弹出对话框
    if (isLoginSuccessful) {
        QMessageBox::information(this, "登录结果", "登录成功！", QMessageBox::Ok);
    } else {
        QMessageBox::warning(this, "登录结果", "登录失败，请检查用户名或密码！", QMessageBox::Ok);
    }
}








void LoginForm::on_signuppushButton_pressed()
{
    RegisterForm * ref = new RegisterForm();
    ref->setAttribute(Qt::WA_DeleteOnClose);
    ref->setWindowModality(Qt::ApplicationModal); // 设置窗口为模态，阻止用户与父窗口交互
    ref->show();

}

void LoginForm::on_signinpushButton_pressed()
{
    check_login();
}

void LoginForm::generateAndInsertData()
{
    // 检查数据库连接是否存在
    if (!QSqlDatabase::contains("qt_sql_default_connection")) {
        QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
        db.setDatabaseName("../ChargingPiles/chargingpile.db"); // 修改为你的数据库路径
        if (!db.open()) {
            qDebug() << "数据库连接失败！";
            return;
        }
    }

    QSqlQuery query;

    // 数据生成参数
    const double nominalVoltage = 220.0;  // 标称电压
    const double nominalCurrent = 16.0;  // 标称电流 (对应 3.5kW)
    const double powerThreshold = 3.5;   // 功率上限 (kW)
    const int numRecords = 500;          // 数据条数
    double current = nominalCurrent;     // 当前电流
    double voltage = nominalVoltage;     // 当前电压

    // 随机波动范围
    const double voltageFluctuation = 1.0; // 电压波动范围 ±1V
    const double currentFluctuation = 0.2; // 电流波动范围 ±0.2A

    srand(static_cast<unsigned>(time(nullptr))); // 初始化随机数种子

    // 插入数据
    for (int i = 0; i < numRecords; ++i) {
        // 时间戳
        QString timestamp = QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss");

        // 模拟电压和电流（带轻微波动）
        voltage = nominalVoltage + ((rand() % 2001 - 1000) / 1000.0) * voltageFluctuation; // 220 ± 1V
        current = nominalCurrent + ((rand() % 2001 - 1000) / 1000.0) * currentFluctuation; // 16 ± 0.2A

        // 计算功率
        double power = (voltage * current) / 1000.0; // 功率单位：kW

        // 限制功率不超过阈值
        if (power > powerThreshold) {
            power = powerThreshold;
        }

        // 插入数据到数据库
        query.prepare("INSERT INTO chargingpiles (当前时间, 电流, 电压, 功率) "
                      "VALUES (:timestamp, :current, :voltage, :power)");
        query.bindValue(":timestamp", timestamp);
        query.bindValue(":current", current);
        query.bindValue(":voltage", voltage);
        query.bindValue(":power", power);

        if (!query.exec()) {
            qDebug() << "插入数据失败！" << query.lastError();
            break;
        }

        qDebug() << "插入数据:" << timestamp << current << voltage << power;

        // 模拟时间间隔
        QThread::msleep(100); // 每条记录间隔100毫秒
    }

    qDebug() << "数据生成完成！";
}
